package com.qianfeng.zhangwei;

import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import com.alipay.sdk.app.PayTask;
import com.qianfeng.zhangwei.alipay.Keys;
import com.qianfeng.zhangwei.alipay.Rsa;
import com.qianfeng.zhangwei.bean.Product;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;

/**
 * 发起支付
 * 第一步生成订单信息
 * 第二步 对生成的订单信息加密签名
 * 第三步 将订单信息转码
 * 第四步 在订单信息后追加加密类型
 */
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private ArrayList<Product> products = new ArrayList<>();
    private ListView listView;
    private static Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    String result = (String) msg.obj;
                    break;
            }


        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initProducts();
        initView();
    }

    private void initView() {

    }

    /**
     * 初始化数据
     */
    private void initProducts() {
        if (products != null)
            return;
        XmlResourceParser parser = getResources().getXml(R.xml.products);
        products = new ArrayList<Product>();
        Product product = null;
        try {
            int eventType = parser.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG
                        && parser.getName().equalsIgnoreCase("product")) {
                    product = new Product();
                    product.subject = parser.getAttributeValue(0);
                    product.body = parser.getAttributeValue(1);
                    product.price = parser.getAttributeValue(2);
                    products.add(product);
                }
                eventType = parser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        pay(products.get(position));
    }

    /**
     * 发起支付
     * 第一步 生成订单信息      生成订单号唯一
     * 第二步 加密商品信息    商品签名
     * 第三步 追加加密方式
     */
    private void pay(Product product) {
        String info = getNewOrderInfo(product);
        String sign = URLEncoder.encode(Rsa.sign(info, Keys.PRIVATE));
        sign = "\"sing" + sign + getSignType();


        final String finalSign = sign;
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                PayTask task = new PayTask(MainActivity)
//
//
////                AliPay aliPay = new AliPay(MainActivity.this, handler);
////                String result = aliPay.pay(finalSign);
//                Message msg = handler.obtainMessage();
//                msg.what = 1;
//                msg.obj = result;
//
//                handler.sendMessage(msg);
//
//            }
//        }).start();


        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                PayTask payTask = new PayTask(MainActivity.this);
                payTask.pay(finalSign);
            }
        };

    }

    private String getSignType() {
        return "\"sign_type" + "\"RSA";


    }

    /**
     * 生成订单信息   需要修改地方  Keys.DEFAULT_PARTNER  用户支付宝注册的生成的商户id  2088开头 15位纯数字
     * product.getSubject() 商品名称
     * product.getBody() 商品介绍
     * product.getPrice() 修改商品的价格;
     * notify_url 字段后台支付成功的回调url  由服务器提供
     *
     * @param product
     * @return
     */
    private String getNewOrderInfo(Product product) {
        StringBuilder sb = new StringBuilder();
        sb.append("partner=\"");
        sb.append(Keys.DEFAULT_PARTNER);
        sb.append("\"&out_trade_no=\"");
        sb.append(getOutTradeNo());
        sb.append("\"&subject=\"");
        sb.append(product.getSubject());
        sb.append("\"&body=\"");
        sb.append(product.getBody());
        sb.append("\"&total_fee=\"");
        sb.append(product.getPrice().replace("一口价:", ""));
        sb.append("\"&notify_url=\"");

        // 网址需要做URL编码  后台支付成功的回调url  由服务器提供
        sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));
        sb.append("\"&service=\"mobile.securitypay.pay");
        sb.append("\"&_input_charset=\"UTF-8");
        sb.append("\"&return_url=\"");
        sb.append(URLEncoder.encode("http://m.alipay.com"));
        sb.append("\"&payment_type=\"1");
        sb.append("\"&seller_id=\"");
        sb.append(Keys.DEFAULT_SELLER);

        // 如果show_url值为空，可不传
        // sb.append("\"&show_url=\"");
        sb.append("\"&it_b_pay=\"1m");   // 支付的过期时间字段，这个1m的意思就是，发起支付，1分钟之内没有支付，就过期
        sb.append("\"");

        return new String(sb);
    }

    /**
     * 本地生成
     *
     *
     * 生成订单信息号 唯一
     *
     * @return 20150812095811
     */
    private String getOutTradeNo() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String key = format.format(new Date());
        Random random = new Random();
        key += random.nextInt();
        key = key.substring(0, 15);
        return key;

    }


}
